package com.yuye.cloud.common.feign;

import com.yuye.cloud.common.dto.DictionaryDTO;
import com.yuye.cloud.common.vo.DictionaryVO;
import com.yuye.cloud.common.constant.ServiceNameConstants;
import com.yuye.cloud.common.feign.fallback.UserServiceFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * @author xgf
 */
@FeignClient(name = ServiceNameConstants.USER_SERVICE, fallbackFactory = UserServiceFallbackFactory.class, decode404 = true)
public interface DictionaryService {
    

    /**
     * feign rpc访问远程/dictionary/getList接口
     *
     * @param dictionaryVO 数据字典 查询的keys VO
     * @return Map 用户实体绑定spring security
     */
    @PostMapping("/dictionary/getList")
    Map<String, List<DictionaryDTO>> findDictionaryByKeyList(@RequestBody DictionaryVO dictionaryVO);
    
    
    /**
     * feign rpc访问远程/dictionary/get/${typeFlag}接口
     * 查询数据字典 对应的数据
     *
     * @param typeFlag type唯一标识
     * @return List 数据字典 实体
     */
	@GetMapping("/dictionary/get/{typeFlag}")
	List<DictionaryDTO> findDictionaryByKey(@RequestParam("typeFlag") String typeFlag);

	 /**
     * feign rpc访问远程/dictionary/get/{typeFlag}/{dictKey}接口
     * 查询数据字典 对应的数据
     *
     * @param typeFlag type唯一标识
     * @param dictKey  数据字典表唯一键
     * @return Optional 数据字典对应的返回值 可能为空 所以使用 Optional
     */
	@GetMapping("/dictionary/get/{typeFlag}/{dictKey}")
	Optional<DictionaryDTO> findDictionaryByKey(@RequestParam("typeFlag") String typeFlag
    		, @RequestParam("dictKey") String dictKey);

}
